/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.NivelTecnico;
import util.ControlaConexao;

/**
 *
 * @author Gilmara Maquine
 */
public class NivelTecnicoDAO {
    
    private Connection conexao;
    private PreparedStatement instrucao;
    private ResultSet resultado;

    private void fechaInstrucao() {
        try {
            this.instrucao.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar instrucao!" + e.getMessage());
        }
    }

    private void fechaConexao() {
        try {
            this.conexao.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar conexao!" + e.getMessage());
        }
    }

    private void fechaResultado() {
        try {
            this.resultado.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar o resultado!" + e.getMessage());
        }
    }
    
    public void inserir(NivelTecnico nivelTecnico){
        try{
            this.conexao = ControlaConexao.getConexao();
            String sql = "CALL INSERIR_NIVEL_TECNICO (?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setString(1,nivelTecnico.getDescricao());
            instrucao.execute();
            System.out.println("Conectado com sucesso!");
        }catch(SQLException e){
            throw new RuntimeException(e);
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
    }
    
    public void alterar(NivelTecnico nivelTecnico){
        try{
            this.conexao = ControlaConexao.getConexao();
            String sql = "CALL ALTERAR_NIVEL_TECNICO (?,?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setString(1,nivelTecnico.getDescricao());
            this.instrucao.setLong(2,nivelTecnico.getId());
            instrucao.execute();
            System.out.println("Conectado com sucesso");
        }catch(SQLException e){
            System.out.println("Erro: "+e.getMessage());
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
        
    }

    public void excluir(NivelTecnico nivelTecnico){
        try{
            this.conexao = new ControlaConexao().getConexao();
            String sql = "CALL EXCLUIR NIVEL_TECNICO (?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setLong(1,nivelTecnico.getId());
            instrucao.execute();
            System.out.println("Conectado com sucesso!");
        }catch(SQLException e){
            System.out.println("Erro: "+e.getMessage());
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
    }
    public NivelTecnico consultar(NivelTecnico nivelTecnico){
        NivelTecnico nivelEncontrado = null;
        try{
            this.conexao = new ControlaConexao().getConexao();
            System.out.println("CONECTADO!");
            String sql = "CALL CONSULTAR_NIVEL_TECNICO (?)";
            this.instrucao = conexao.prepareStatement(sql);
            instrucao.setLong(1,nivelTecnico.getId());
            resultado = instrucao.executeQuery();
                while (resultado.next()) {
                    nivelEncontrado = new NivelTecnico();
                    nivelEncontrado.setId(Long.parseLong(resultado.getString("nt_id")));
                    nivelEncontrado.setDescricao(resultado.getString("nt_descricao"));
                   

                }
        }   
            catch(SQLException e){
                System.out.println("Erro: "+e.getMessage());
            }finally{
                fechaResultado();
                fechaInstrucao();
                fechaConexao();
            }
       return nivelEncontrado;
        }
    
    public List<NivelTecnico> pesquisar(NivelTecnico nivelTecnico){
        NivelTecnico nivelEncontrado = null;
        List<NivelTecnico> listaniveis = new ArrayList<NivelTecnico>();
        try {
            this.conexao = new ControlaConexao().getConexao();
            System.out.println("Conectado!");
            String sql = "CALL PESQUISAR_NIVEL_TECNICO (?)";
            this.instrucao = conexao.prepareStatement(sql);
            instrucao.setString(1, "%" + nivelTecnico.getDescricao() + "%");
            resultado = instrucao.executeQuery();
            while (resultado.next()) {
                nivelEncontrado = new NivelTecnico();
                nivelEncontrado.setId(Long.parseLong(resultado.getString("nt_id")));
                nivelEncontrado.setDescricao(resultado.getString("nt_descricao"));
                
                listaniveis.add(nivelEncontrado);

            }
          }catch(SQLException e){
                System.out.println("Erro: "+e.getMessage());
            }finally{
                fechaResultado();
                fechaInstrucao();
                fechaConexao();
        }
        return listaniveis;
    }
    
    }
    
